package controlador;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import vista.VentanaProducto;
import modelo.*;

public class ControladorVentanaProducto implements ActionListener {

	private VentanaProducto ventanaProducto;
	private CategoriaDAO categoriaDAO = new CategoriaDAO();
	private ProductoDAO productoDAO = new ProductoDAO();
	private IngredienteDAO ingredienteDAO = new IngredienteDAO();
	private DetalleProductoDAO detalleproductoDAO = new DetalleProductoDAO();
	private float precio=0;
	private Ingrediente ingrediente = new Ingrediente();
	
	public ControladorVentanaProducto() {
		super();
		this.ventanaProducto = new VentanaProducto();
		this.ventanaProducto.setVisible(true);	
		this.ventanaProducto.addListener(this);	
		ventanaProducto.cargarComboCategoria(categoriaDAO.llenarComboCategoria());
		ventanaProducto.cargarComboIngrediente(ingredienteDAO.llenarComboIngrediente());
	}
	
	private void registrarProducto(){
		  	try
			{
		    	if(ventanaProducto.getCodigo().equals("")|| 
		    			ventanaProducto.getDescripcion().equals("") || 
		    			ventanaProducto.getPrecio().equals(""))
		                ventanaProducto.mostrarMensaje("Debe llenar todos los datos para poder registrar el producto");
		    	else
		    	{
		    		Producto producto = new Producto();
		    	    String codigoproducto = ventanaProducto.getCodigo();
		    	    String descripcion = ventanaProducto.getDescripcion();
		    	    Categoria categoria = new Categoria();
		    	    categoria=categoriaDAO.buscarCategoria(ventanaProducto.getNombreCategoria());
		    	    String codigocategoria = categoria.getCodigocategoria();
		    	    float precio = Float.valueOf(ventanaProducto.getPrecio());
		    	    int status=1;
		    	    
		    	    producto = new Producto(codigoproducto, descripcion, codigocategoria, precio, status);
		    	    
		    	    productoDAO.registrarProducto(producto);
		    	    
		    	    int i=ventanaProducto.getDetalleProducto().getRowCount();
			       
			        for(int j=0; j<i;j++)
			        {
			        	DetalleProducto detalleproducto=new DetalleProducto(ventanaProducto.getCodigo(), String.valueOf(ventanaProducto.getDetalleProducto().getValueAt(j, 1)), Float.parseFloat(String.valueOf(ventanaProducto.getDetalleProducto().getValueAt(j, 3))));
			        	detalleproductoDAO.registrarDetalleProducto(detalleproducto);
			        }
			        ventanaProducto.mostrarMensaje("El producto se ha registrado con exito");
			    	ventanaProducto.borrarDatos();
		    	}
			}catch(Exception e)
			{
				ventanaProducto.mostrarMensaje("No se pudo registrar el producto, verifique que los datos sean correctos");
				ventanaProducto.borrarDatos();
			}
		}

	
	private void buscarProducto(){
		if(ventanaProducto.getCodigo().equals(""))
			ventanaProducto.mostrarMensaje("Debe Indicar el codigo del producto");
		else{
			Producto producto = new Producto();
		
			producto = productoDAO.busquedaProducto2(ventanaProducto.getCodigo());
		
			if(producto != null){
				ventanaProducto.mostrarMensaje("El producto ya Existe!!!");
				ventanaProducto.setCodigo();
			}
			else
				ventanaProducto.mostrarMensaje("Puede continuar. El producto aun no ha sido Registrado");
		}
	}
	
	private void incluirProducto(){
			String codigoproducto = ventanaProducto.getCodigo();
			String cantidad = ventanaProducto.getCantidad();
			String nombre = ventanaProducto.getNombreIngrediente();
			ingrediente = ingredienteDAO.buscarIngrediente(nombre);
			precio+=ingrediente.getCosto()*Float.parseFloat(cantidad);
			ventanaProducto.getDetalleProducto().incluir(codigoproducto, ingrediente.getCodigoingrediente(), nombre, cantidad, String.valueOf(ingrediente.getCosto()), String.valueOf(ingrediente.getCosto()*Float.parseFloat(cantidad)));
			ventanaProducto.setPrecio(String.valueOf(precio));
	}
	
	private void removerDetalle(){
		precio-=Float.parseFloat(String.valueOf(ventanaProducto.getDetalleProducto().getValueAt(ventanaProducto.seleccionDetalleProducto(), 4)));
		ventanaProducto.setPrecio(String.valueOf(precio));
		ventanaProducto.getDetalleProducto().remover(ventanaProducto.seleccionDetalleProducto());
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		if (actionCommand.equals("Buscar")) {
			buscarProducto();
		}		
		else if (actionCommand.equals("Aceptar")){
			incluirProducto();
		}
		else if (actionCommand.equals("Remover")){
			removerDetalle();
		}
		else if (actionCommand.equals("Guardar")){
			registrarProducto();
		}
		else if (actionCommand.equals("Cancelar")) {
			ventanaProducto.borrarDatos();
		}
		else if (actionCommand.equals("Salir")){
			this.ventanaProducto.setVisible(false);
		}
	}

}